package com.zzzs.volatiledemo;

import java.util.concurrent.TimeUnit;

/**
 * volatile
 * 1. 保证可见性
 * 2. 不保证原子性
 * 3. 禁止指令重排
 *
 * @author zhu_shuai
 * @since 2021/6/28
 */
public class Demo1 {

    // private static int num = 0;  // 没有volatile修饰时， thread一直在 while循环
    private static volatile int num = 0; // 使num在多个线程中确保修改后可见

    public static void main(String[] args) throws InterruptedException {
        new Thread(() -> {
            while (true){
                // System.out.println(num);
                if (num != 0) {
                    break;
                }
            }
        }).start();
        TimeUnit.SECONDS.sleep(1); // 延迟一秒，确保线程启动
        num = 1;
        System.out.println(num);
    }

}
